22
תגובות
שלום,
יש לי לדוגמה שלושה classים עם אותו שם,
אני דרך jQuery רוצה לבצע פונקציה/פעולה רק על ה class השני מבינהם, איך אני עושה את זה?

22 תשובות

avatar ענה yardsod ב 02 לדצמבר 2013 #

תן להם id שונה ותבצע את הפעולה לפי ה id (#). אני לא בטוח שיש עוד דרך...

avatar ענה OrelBeY ב 02 לדצמבר 2013 #

שלושה Classים עם אותו שם? כנראה התכוונת לשלושה אלמנטים עם אותו Class. בכל מקרה, אני לא ממש מבין ב-jQuery, אבל נדמה לי שזה די פשוט; תיעזר בדוקומנטציה. מה שאתה צריך לעשות זה לקבל רשימה של כל האלמנטים שנמצאים ב-Class מסוים, ופשוט לקחת את השני מביניהם ולפעול עליו.

@yardsod במצב כזה אני לא רואה שום סיבה להשתמש ב-ID. תמיד עדיף למצוא שיטות לוגיות לעשות את זה במקום לפנות ישר לסימון ישיר של ID. זה גמיש יותר.

avatar ענה yonikal56 ב 03 לדצמבר 2013 #

בעזרת eq().
אז זה יהיה ככה:

$(".class").eq(1).text("2");

דוגמא זו תוציא לך את האלמנט השני שהclass שלו הוא "class".(האלמנט הראשון הוא 0 לכן השני הוא 1)
בהצלחה

avatar ענה yardsod ב 03 לדצמבר 2013 #

@yonikal56 תודה. לא שאלתי את השאלה אבל עזרת גם לי....

avatar ענה yonikal56 ב 03 לדצמבר 2013 #

עניתי גם למי ששאל.

avatar ענה OrelBeY ב 03 לדצמבר 2013 #

@yonikal56 זה לא עונה על השאלה. "אם הם באותו מקום." הם לא בהכרח באותו מקום.
עריכה: נראה שזו באמת הדרך לעשות את זה. למה אמרת שזה רק אם הם באותו מקום? eq() פועל על סט הערכים, שבמקרה הזה הוא כל האלמנטים עם אותו Class. הם לא חייבים להיות אחד ליד השני.

avatar ענה yonikal56 ב 03 לדצמבר 2013 #

התבלבלתי בין nth-child.

avatar ענה OrelBeY ב 03 לדצמבר 2013 #

זה בסדר, קורה. :-)

avatar ענה zacharya ב 03 לדצמבר 2013 #

@yonikal56 זה נכון, רק רוצה להזכיר שניתן לעשות גם:

$(".class:eq(1)").text("2");

avatar ענה OrelBeY ב 03 לדצמבר 2013 #

@zacharya ואז תוותר על אופטימיזציית DOM. לקוח מהדוקומנטציה:

Because :eq() is a jQuery extension and not part of the CSS specification, queries using :eq() cannot take advantage of the performance boost provided by the native DOM querySelectorAll() method. For better performance in modern browsers, use $("your-pure-css-selector").eq(index) instead.

avatar ענה yonikal56 ב 03 לדצמבר 2013 #

מה שהוא אמר באמת עובד ובמדריכים לימדתי ככה, אבל המדריכים היו מיועדים לזה, מה שהראתי פה זה עדיף.

avatar ענה ArielTador ב 03 לדצמבר 2013 #

אבל זה לא עובד:

$(this.id + " .about").slideDown("fast").eq(thisj);


זה עדיין עושה את הפעולה על כל ה classים שיש לי, ולא רק על ה class השני, (thisj=2)

avatar ענה yonikal56 ב 03 לדצמבר 2013 #

בטח שלא יעבוד לך. האירוע eq צריך להיות לפני הפונקציה שמופעלת במקרה שלך slideDown.

avatar ענה ArielTador ב 03 לדצמבר 2013 #

עכשיו עובד.. עוד משהו, איך אני מקבל eq של class ע"פ המשתנה this ?

avatar ענה zacharya ב 03 לדצמבר 2013 #

ברגע שאתה קיבלת את הסלקטור ככה:

$(".class").eq(1).text("2");


אתה יכול להוסיף פונקצייה שתקבל את הTHIS הנוצר:
$(".class").eq(1).text("2", function(){
    var get = $(this);
});

avatar ענה ArielTador ב 03 לדצמבר 2013 #

אבל אם יש לי פונקציה כזו למשל:
$(".body_warp_websites_work_body").hover(function(){
});

איך בתוכה אני לוקח את ה eq שלה?

avatar ענה yonikal56 ב 03 לדצמבר 2013 #

מוסיף לתגים src לפי המספר שלם מ0 עד 1 ומוציא בעזרת

attr('src')
את מספר התג.

avatar ענה yardsod ב 03 לדצמבר 2013 #

@ArielTador ככה:

$(".body_warp_websites_work_body").eq(1).hover(function(){
});

עריכה: לא הבנתי את השאלה... תתעלם

avatar ענה ArielTador ב 03 לדצמבר 2013 #

כן עשיתי את זה לבינתים(כבר חשבתי על זה), אבל אין שיטה חלופית?

avatar ענה yonikal56 ב 03 לדצמבר 2013 #

שיטה חלופית למה?

avatar ענה ArielTador ב 03 לדצמבר 2013 #

שיטה חלופית ללעשות attr('src').

avatar ענה yonikal56 ב 03 לדצמבר 2013 #

יש דרכים לקבלת האירוע אבל לא לקבלת מספר האלמנט לפי מה שידוע לי.
הסתכלתי ברשימת כל האירועים ששם זה אמור להופיע אבל זה לא מופיע, אז אין.